﻿namespace DYH.Extensions.CAD.Tools;

/// <summary>
/// Enumerator扩展工具
/// </summary>
public static class EnumeratorTool
{
    /// <summary>
    /// 将一个 Range 对象转换为一个枚举器 (IEnumerator<![CDATA[<]]><see cref="int"/>>)，用于遍历范围内的整数值
    /// </summary>
    /// <param name="range">表示一个范围的 Range 对象，包含起始值和结束值</param>
    /// <returns>
    /// 返回一个 IEnumerator<![CDATA[<]]><see cref="int"/>> 枚举器，按顺序或逆序生成范围内的整数值
    /// 如果范围的起始值或结束值是从末尾计算的（IsFromEnd 为 true），则返回空枚举器
    /// </returns>
    public static IEnumerator<int> GetEnumerator(this Range range)
    {
        // 如果范围的起始值或结束值是从末尾计算的，则直接终止枚举
        if (range.Start.IsFromEnd || range.End.IsFromEnd)
            yield break;

        // 如果起始值小于等于结束值，则按升序生成范围内的整数
        if (range.Start.Value <= range.End.Value)
        {
            for (var i = range.Start.Value; i <= range.End.Value; i++)
            {
                yield return i;
            }
        }
        else
        {
            // 如果起始值大于结束值，则按降序生成范围内的整数
            for (var i = range.Start.Value; i >= range.End.Value; i--)
            {
                yield return i;
            }
        }
    }
}
